package br.com.consultsystems.interfaces.service.cadastro;

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.jboss.resteasy.logging.Logger;

import br.com.consultsystems.dominio.cadastro.Pessoa;
import br.com.consultsystems.dominio.tipos.EstadoCivil;
import br.com.consultsystems.interfaces.AbstractService;
import br.com.consultsystems.interfaces.Resposta;
import br.com.consultsystems.negocio.spec.cadastro.PessoaNegocio;

@Path("service/pessoa")
public class PessoaService extends AbstractService {
	
	private static final Logger LOG = Logger.getLogger(PessoaService.class);
	
	@Inject
	PessoaNegocio pessoaNegocio;

	@POST
	@Path("/retrieve/filter")
	@Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8")
	public String retrieveByFilter(String nome) {
		
		Resposta resposta = new Resposta();
		List<Pessoa> pessoas;

		try {
			pessoas = pessoaNegocio.retrieveByFilter(nome);
			resposta.setStatus(true);
			resposta.setMessage(pessoas.size() + " registros encontrados.");
			resposta.setObject(pessoas);
		} catch (Exception e) {
			LOG.error("Problemas de comunicação: ", e);
			resposta.setStatus(false);
			resposta.setMessage(e.getMessage());
			resposta.setObject(null);
		}
		
		return getGSon().toJson(resposta);
	}

	@POST
	@Path("/retrieve/estadoscivil")
	@Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8")
	public String retrieveByEstados() {
		
		Resposta resposta = new Resposta();
		List<String> estados = new ArrayList<String>();

		try {
			for(EstadoCivil estadoCivil: EstadoCivil.values()) {
				estados.add(estadoCivil.toString());
			}
			resposta.setStatus(true);
			resposta.setMessage(estados.size() + " registros encontrados.");
			resposta.setObject(estados);
		} catch (Exception e) {
			LOG.error("Problemas de comunicação: ", e);
			resposta.setStatus(false);
			resposta.setMessage(e.getMessage());
			resposta.setObject(null);
		}
		
		return getGSon().toJson(resposta);
	}
	
	@POST
	@Path("/save")
	@Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8")
	public String save(String json) {
		
		Resposta resposta = new Resposta();

		try {
			Pessoa pessoa = getGSon().fromJson(json, Pessoa.class);

			pessoa = pessoaNegocio.merge(pessoa);
			resposta.setStatus(true);
			resposta.setMessage("Registro salvo com sucesso!!");
			resposta.setObject(pessoa);
		} catch (Exception e) {
			LOG.error("Problemas de comunicação: ", e);
			resposta.setStatus(false);
			resposta.setMessage(e.getMessage());
			resposta.setObject(null);
		}
		
		return getGSon().toJson(resposta);
	}

	@POST
	@Path("/remove")
	 @Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8")
	public String remove(String json) {
		
		Resposta resposta = new Resposta();

		try {
			Pessoa pessoa = getGSon().fromJson(json, Pessoa.class);

			pessoaNegocio.remove(pessoa);
			resposta.setStatus(true);
			resposta.setMessage("Registro excluido com sucesso!!");
			resposta.setObject(pessoa);
		} catch (Exception e) {
			LOG.error("Problemas de comunicação: ", e);
			resposta.setStatus(false);
			resposta.setMessage(e.getMessage());
			resposta.setObject(null);
		}
		
		return getGSon().toJson(resposta);
	}
	
}
